package Commandes;


import java.util.*;

public class InvokerPrecedentSuivant extends Observable{
    
    private static InvokerPrecedentSuivant invoker;
    private Stack pilePrecedent;
    private Stack pileSuivant;
       
    
    private InvokerPrecedentSuivant() {
        
        this.pilePrecedent=new Stack();
        this.pileSuivant=new Stack();

    }
    
    
    public static InvokerPrecedentSuivant getInvoker(){
        
        if(invoker==null){
            
            invoker=new InvokerPrecedentSuivant();
        }
        
        return invoker;
    }
    
    public void Suivant(Commande c){
        
        c.execute();
        this.pilePrecedent.push(c);
        setChanged();
        notifyObservers();
    }
    
    public void Precedent(){
        
        if(!this.pilePrecedent.empty()){
            Commande c=(Commande)this.pilePrecedent.pop();
            c.cancel();
            pileSuivant.push(c);
            this.setChanged();
            this.notifyObservers();
            this.clearChanged();}
        }
    
    public void reinitialiser(){
        
        this.pilePrecedent.removeAllElements();
        this.pileSuivant.removeAllElements();
    }
    
    public Commande getCommandePileAnnuler(){
        if (!(pilePrecedent.empty())){
            return (Commande)pilePrecedent.peek();
        }else{
            return null;
        }
    }
    
    public Commande getCommandePileRefaire(){
        
        if (!pileSuivant.empty()){
            return (Commande)pileSuivant.peek();
        }else{
            return null;
        }
    }
    
    
}
